package leetcode.year2021.month10;

import java.util.ArrayList;
import java.util.List;

public class _02_01LetterCasePermutation784 {

  public List<String> letterCasePermutation(String s) {
    List<StringBuilder> ans = new ArrayList<>();
    ans.add(new StringBuilder());

    for (char c : s.toCharArray()) {
      int n = ans.size();
      if (Character.isLetter(c)){
        for (int i = 0; i < n; i++) {
          ans.add(new StringBuilder(ans.get(i)));
          ans.get(i).append(Character.toUpperCase(c));
          ans.get(i+n).append(Character.toLowerCase(c));
        }
      } else {
        for (int i = 0; i < n; i++) {
          ans.get(i).append(c);
        }
        }
      }
    ArrayList<String> result = new ArrayList<>();

    for (int i = 0; i < ans.size(); i++) {
      result.add(ans.get(i).toString());
    }
    return result;
  }
  }

  /**
   *
   * 给定一个字符串S，通过将字符串S中的每个字母转变大小写，我
   * 们可以获得一个新的字符串。返回所有可能得到的字符串集合。
   *
   * 示例：
   * 输入：S = "a1b2"
   * 输出：["a1b2", "a1B2", "A1b2", "A1B2"]
   *
   * 输入：S = "3z4"
   * 输出：["3z4", "3Z4"]
   *
   * 输入：S = "12345"
   * 输出：["12345"]
   *
   * S 的长度不超过12。
   * S 仅由数字和字母组成。
   *
   */
